package org.zp.aop;
import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Service;

@Service
@Aspect
public class MyAop {
	/**
	 * execution() -> 固定写法，主要是内部的参数比较重要
	 * public -> 盘查所有修饰符是public的方法
	 * * -> 不论任何返回值都需要盘查，（例如盘查String，java.lang.String）
	 * org.lgs.service -> 包名
	 * * -> 类名（*就代表所有的类）
	 * * -> 方法名随意
	 * (..) -> 参数随意（例如：盘查参数是一个String，(java.lang.String)）
	 */
	@Before("execution(public * org.zp.service.*.*(..))")
	public void before() {
		System.out.println("之前service方法之前执行了这个before方法...");
	}
	
	
	private Logger log = Logger.getLogger(MyAop.class);
	
	@Around("execution(public * org.zp.service.*.*(..))")
	public Object around(ProceedingJoinPoint pjp) throws Throwable {
		try {
			 Object retVal = pjp.proceed();
			 return retVal;
		}catch(Exception ex) {
			System.out.println("你出错了...");
			log.error(ex.getMessage());
			throw ex; // 注意这里！！！
		}
	}
}